Paradigmas da Programação I
ESI (5301P3) / MCC (7001N4)
7 de Fevereiro de 2000
Questão 1
As permutações de uma lista são as listas que se obtêm desta
trocando os seus elementos de ordem. Por exemplo, as permutações da
lista [1,2,3] são
[[1,2,3],[2,1,3],[2,3,1],[1,3,2],[3,1,2],[3,2,1]]
- 1.
- Defina uma função ins :: a -> [a] -> [[a]] que, dado um
elemento x e uma lista l dê como resultado a
lista das listas resultantes de inserir x em alguma
posição de l; por exemplo
ins 1 [2,3,4] = [[1,2,3,4],[2,1,3,4],[2,3,1,4],[2,3,4,1]]
- 2.
- Use a função anterior para definir a função
perms :: [a] -> [[a]] que calcula as permutações de
uma lista.
- 3.
- A seguinte função testa se uma dada lista está ordenada
ordenada l = and (zipWith (<=) l (tail l))
Ao perguntarmos ao HUGS qual o seu tipo, i.e., ao
executarmos o comando :type ordenada, obtemos como
resposta
ordenada :: Ord a => [a] -> Bool
Explique por palavras suas o que significa este tipo.
- 4.
- Qual o resultado de calcular a seguinte expressão:
head (filter ordenada (perms [1,3,5,4,2]))
Questão 2
Pretende-se implementar um sistema de gestão de clubes de video.
Para cada video pretende-se guardar:
- código
- título
- categoria (policial, drama, documentário, ficção, etc)
- número de copias do video que o clube possui
- códigos dos sócios que têm o video requisitado na altura
- número de alugueres do video até à altura
Para cada sócio deve-se guardar:
- código
- nome
- morada
- códigos dos videos currentemente requisitados
- 1.
- Defina o tipo Clube onde será armazenada toda a
informação referida atrás.
- 2.
- Apresente a definição da função insSocio que, dado um
clube, o código, nome e a morada de um novo sócio, retorna o
clube com este novo sócio.
- 3.
- Apresente a definição da função nCopias que, dado o
código de um video, retorna o número de cópias disponíveis
(i.e., não alugadas).
Questão 3
Considere a seguinte definição:
type RegTemp = ( Float, Int)
type RegistosTemp = [ RegTemp ]
que representa leituras de temperaturas num reactor nuclear. Cada
leitura é constítuida pelo valor da temperatura lido (ex. 109.5) e
o instante de tempo da leitura desde a entrada em funcionamento
(ex. 355 minutos).
- 1.
- Defina uma função que dada uma lista de leituras, a ordene no
tempo.
- 2.
- Defina uma função que dada uma lista de leituras detecte picos
de temperatura (quando o elemento anterior tiver valor inferior
e o seguinte também).
- 3.
- Defina uma função que dada uma lista de leituras detecte
situações de alarme (cinco leituras seguidas com valores
crescentes).
Questão 4
Complete a seguinte definição
data Conjunto a = Elems [a]
class Eq a where
(==) :: a -> a -> Bool
instance Eq a => Eq (Conjunto a) where ...
Questão 5
Seja t definido por
t = foldl max 0 [1,5,3,4]
Indique o tipo e o valor de t.
Explique por palavras suas o significado de t.
Questão 6
Suponha o seguinte tipo que pretende armazenar uma imagem a preto e
branco com uma determinada dimensão (apenas são armazenadas as
posições onde deve aparecer um píxel a cheio):
type Ponto = (Int,Int)
type Dimensao = Ponto
data Imagem = Imagem Dimensao [Ponto]
Defina Imagem como uma instância da classe Show,
de forma que que o resultado de
exemplo = Imagem (3,3) [(1,2),(2,1),(2,2),(2,3),(3,1)]
putStr (show exemplo)
seja
*
***
*
José Bernardo Barros
2000-02-07